import AbilityUtil from "@/AbilityUtil";
import BaseUtil from "@/BaseUtil";
import MathUtil from "@/MathUtil";
import UnitSpellEvent from "@/event/UnitSpellEvent";
import 单位函数 from "框架/通用/单位";

export default class 冷却系统 {
  constructor() {
    se.onUnitSpellEffect(this.action);
  }
  action(this: void, e: UnitSpellEvent) {
    let 触发单位 = e.trigUnit;
    // 非玩家单位不触发
    if (GetOwningPlayer(触发单位) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) {
      return;
    }
    let 技能id = e.spellAbilityId;
    BaseUtil.runLater(0.01, () => {
      let 原冷却 = AbilityUtil.getUnitAbilityStateCooldown(触发单位, 技能id);
      if (原冷却 <= 0.01) {
        return;
      }
      let 技能冷却 = 单位函数.取冷却降低(触发单位);
      技能冷却 = MathUtil.clamp(技能冷却, 0, 1);
      原冷却 *= 技能冷却;
      AbilityUtil.setUnitAbilityStateCooldown(触发单位, 技能id, 原冷却);
    });
  }
}
